package com.wolfword.common.util.object;

import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import flexjson.JSONDeserializer;
import flexjson.JSONSerializer;
import flexjson.transformer.DateTransformer;

/**
 * 数据转换成Json
 * @author ServerZhang
 * @date 2016年3月17日
 */
public class JSONSerielizer {
	
	public static DateTransformer dateFormater=new DateTransformer("yyyy-MM-dd'T'HH:mm:ss");
	
	
	 /**
	 * Object 转 Json
	 * @param obj
	 * @param includeStr
	 * @param excludeStr
	 * @return
	 * @author ServerZhang
	 * @date 2016年5月5日
	 */
	public static String toJson(Object obj,String[] includeStr,String[] excludeStr){	
		if(obj == null || obj.toString().equals("null")) return null;
		if(obj != null && obj.getClass() == String.class){
			return obj.toString();
		}
		JSONSerializer serializer = new JSONSerializer();
		if(includeStr!=null){
			serializer.include(includeStr);
		}
		if(excludeStr!=null){
			serializer.exclude(excludeStr);
		}
		serializer.transform(new DateTransformer("yyyy-MM-dd'T'HH:mm:ss"), Date.class);
		serializer.transform(new DateTransformer("yyyy-MM-dd'T'HH:mm:ss"), Timestamp.class);
		String serialize = serializer.deepSerialize(obj);
		//将数据中的所有null替换成字符串
		return serialize.replaceAll(":null", ":\"\"");
	}
	
	 /**
	 * JSON 转 Map
	 * @param json
	 * @return
	 * @author ServerZhang
	 * @date 2016年5月5日
	 */
	public static Map<String, Object> toMap(String json){
		Boolean canDo =  true;
		//检查字符串是否合法
		canDo = json.startsWith("{") && json.endsWith("}");
		if (!canDo) {
			return new HashMap<String, Object>();
		}
		JSONDeserializer<Map<String, Object>> jsonDeserializer = new JSONDeserializer<Map<String,Object>>();
		return jsonDeserializer.deserialize(json);
		/*String newStr = json.substring(1, json.length()-1);
		String replaced = newStr.replaceAll("\",\"", "\"&comma&\"");
		String[] keyValue = replaced.split("&comma&");
		if (keyValue.length < 1) {
			return map;
		}
		for(String str : keyValue){
			String replaceStr = str.replaceFirst(":", "&spliter&");
			String[] split = replaceStr.split("&spliter&");
			if (split.length != 2) {
				return map;
			}
			map.put(split[0].replaceAll("\"", ""), split[1].replaceAll("\"", ""));
		}
		return map;*/
	}

	/**
	 * JSON 转 List<Map>
	 * @param json
	 * @return
	 * @author ServerZhang
	 * @date 2016年8月31日
	 */
	public static List<Map<String, Object>> toListMap(String json){
		Boolean canDo =  true;
		//检查字符串是否合法
		canDo = json.startsWith("[") && json.endsWith("]");
		if (!canDo) {
			return new ArrayList<Map<String,Object>>();
		}
		JSONDeserializer<List<Map<String, Object>>> jsonDeserializer = new JSONDeserializer<List<Map<String, Object>>>();
		return jsonDeserializer.deserialize(json);
	}
	/**
	 * JSON 转 List<String>
	 * @param json
	 * @return
	 * @author ServerZhang
	 * @date 2017年10月24日
	 */
	public static List<String> toListString(String json){
		Boolean canDo =  true;
		//检查字符串是否合法
		canDo = json.startsWith("[") && json.endsWith("]");
		if (!canDo) {
			return new ArrayList<String>();
		}
		JSONDeserializer<List<String>> jsonDeserializer = new JSONDeserializer<List<String>>();
		return jsonDeserializer.deserialize(json);
	}
	
}
